Cloud computing is a computing paradigm in which a customer pays a “cloud provider” to execute a program on computer hardware owned and/or controlled by the cloud provider. It is common for cloud providers to make virtual machines hosted on its computer hardware available to customers for this purpose. The cloud provider typically provides an interface that a customer can use to requisition virtual machines and associated resources such as processors, storage, and network services, etc., as well as an interface a customer can use to install and execute the customer's program on the virtual machines that the customer requisitions, together with additional software on which the customer's program depends. For programs that are web applications, the additional software can include such software components as middleware and a framework. Web applications are programs that receive and act on requests in web or other Internet protocols, such as HTTP. It is common for a user to interact with a web application via a browser executing on the user's client computer system to send requests in a web protocol via the Internet to a server computer system on which the web application is executing. It is also common for automatic user agents to interact with web applications in web protocols in the same fashion.
While many web applications are suitable for execution in the cloud, it often requires significant expertise and effort in order to install, execute, and manage a web application in the cloud. For example, an administrator typically should identify all of the software components for the execution of a web application, and what versions of those software components are acceptable. In addition, the administrator typically should obtain, install, and appropriately configure each such software component, as well as the application itself. Where this high level of expertise and effort has been invested in order to get a web application running on a particular hypervisor and in a particular provider's cloud, a similarly high level of expertise and effort usually should be subsequently invested in order to execute the web application instead or in addition on a different hypervisor and/or in a different particular provider's cloud. Also, it can be difficult or impossible to obtain useful information about how the application is performing and otherwise behaving when executing in the cloud.
Accordingly, software and/or hardware facilities for facilitating the execution of web applications in the cloud have been introduced, and are known as Platform-as-a-Service (PaaS) offerings and systems. PaaS offerings facilitate deployment of applications without the cost and complexity of buying and managing the underlying hardware and software and provisioning hosting capabilities, providing all of the facilities for supporting the complete life cycle of building and delivering web application and services entirely available from the Internet. Typically, these facilities operate as one or more virtual machines (VMs) running on top of a hypervisor in a host server.
In present PaaS offerings, a first customer's deployed applications do not co-exist with any other customer's deployed applications on the VMs that are hosting the first customer's deployed applications. However, such an arrangement can be inefficient to the PaaS provider offering the platform services. This is because a customer often deploys a single application, and the size of the VM does not correspond to the size of the application. It can be costly to initialize a new VM for each customer's application deployment, and it can also be a waste of resources that are not being utilized. In a public cloud environment, a PaaS provider pays for deploying a VM whether the VM lies idle or not. In a private cloud environment, there is still a strain on resources for running VMs that are not completely utilized. As such, it may be more cost-efficient to deploy applications of multiple customers in a single VM, rather than associating a VM or a group of VMs with a single application or a group of applications from a single customer. However, a variety of implementation concerns arise when considering deploying applications of multiple customers in a single VM, such as security concerns and efficient resource sharing concerns.